
#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 5;
int n, pre[N], suc[N], a[N], las[N], vis[N], o[N << 2], tag[N << 2];

void add(int l, int r, int u, int ml, int mr, int v){ // [ml, mr] += v
    if(ml <= l && r <= mr){
        o[u] += v;
        tag[u] += v;
        return;
    }
    int mid = (l + r) >> 1;
    tag[u << 1] += tag[u], o[u << 1] += tag[u];
    tag[u << 1 | 1] += tag[u], o[u << 1 | 1] += tag[u];
    tag[u] = 0;
    
    if(ml <= mid) add(l, mid, u << 1, ml, mr, v);
    if(mr > mid) add(mid + 1, r, u << 1 | 1, ml, mr, v);
    o[u] = max(o[u << 1], o[u << 1 | 1]);
}

int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%d", &a[i]);
    }
    
    for(int i = 1; i <= n; i++){
        pre[i] = pre[i - 1];
        las[i] = vis[a[i]];
        if(!vis[a[i]]) pre[i]++;
        vis[a[i]] = i;
    }
    
    memset(vis, false, sizeof(vis));
    for(int i = n; i; i--){
        suc[i] = suc[i + 1];
        if(!vis[a[i]]) suc[i]++;
        vis[a[i]] = i;
    }
    
    int ans = 0;
    for(int j = 1; j < n; j++){
        ans = max(ans, suc[j + 1] + o[1]);
        add(1, n, 1, j, j, pre[j]);
        add(1, n, 1, las[j + 1], j, 1);
    }
    
    printf("%d\n", ans);
    return 0;
}